#ifndef _SORTTESTHELPER_H_
#define _SORTTESTHELPER_H_
#include <iostream>
using namespace std;

namespace SortTestHelper{
    // 生成有n个元素的随即数组，每个元素的随机范围为[rangeL, rangeR]
    int *generateRandomArray(int n, int rangeL, int rangeR){
        assert(rangeL < rangeR);

        int *arr = new int[n];
        srand(time(NULL));
        for(int i=0;i < n; i++){
            arr[i] = rand() % (rangeR - rangeL + 1) + rangeL;
        }
        return arr;
    }

    // 打印arr数组的全部内容
    template<typename T>
    void printArray(T arr[], int n){
        for(int i=0; i< n; i++){
            cout << arr[i] << " ";
        }
        cout << endl;
    }

    // 判断数组是否有序(升序)
    template<typename T>
    bool isSorted(T arr[], int n){
        for(int i = 0; i < n-1; i++){
            if(arr[i] > arr[i+1]){
                return false;
            }
        }
        return true;
    }

    // 测试sort排序算法排序arr数组所得到结果的正确性和算法运行时间
    // sort是main里面的排序函数的函数指针，sortName指明是升序还是降序
    template<typename T>
    void testSort(const string &sortName, void(*sort)(T[], int), T arr[], int n){
        clock_t startTime = clock();
        sort(arr, n);
        clock_t endTime = clock();
        assert(isSorted(arr, n));
        cout << sortName << " : " << double(endTime - startTime)/CLOCKS_PER_SEC << " s" <<endl;
    }
}
#endif // _SORTTESTHELPER_H_